/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package ec.edu.espe.ccsoft.mantenimiento.bean;

import ec.edu.espe.ccsoft.mantenimiento.modelos.Acceso;
import ec.edu.espe.ccsoft.mantenimiento.servicios.AccesoServicio;
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import org.primefaces.model.menu.DefaultMenuItem;
import org.primefaces.model.menu.DefaultMenuModel;
import org.primefaces.model.menu.DefaultSubMenu;
import org.primefaces.model.menu.MenuModel;

/**
 *
 * @author misahaelfernandez
 */
@ManagedBean
@SessionScoped
public class MenuBean implements Serializable {

    @EJB
    private AccesoServicio accesoServicio;
    private MenuModel model;
    private Integer codigoRol;

    @PostConstruct
    public void init() {
        model = new DefaultMenuModel();
        codigoRol = 0;
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
        codigoRol = (Integer) session.getAttribute("codigoRol");

        try {
            for (Acceso menu : accesoServicio.obtenerMenu(codigoRol)) {
                DefaultSubMenu menuPrincipal = new DefaultSubMenu();
                menuPrincipal.setLabel(menu.getNombre());
                for (Acceso submenu : accesoServicio.obtenerSubMenu(codigoRol, menu.getCodAcceso())) {

                    if (submenu.getSubmenu() == null && submenu.getMenu() != null && accesoServicio.obtenerMenuItem(codigoRol, submenu.getCodAcceso()).isEmpty()) {
                        DefaultMenuItem menuItem = new DefaultMenuItem(submenu.getNombre());
                        menuItem.setAjax(false);
                        menuItem.setImmediate(true);
                        menuItem.setCommand(submenu.getComando());
                        menuPrincipal.addElement(menuItem);
                    } else {
                        DefaultSubMenu menuHijo = new DefaultSubMenu(submenu.getNombre());

                        for (Acceso submenuItem : accesoServicio.obtenerMenuItem(codigoRol, submenu.getCodAcceso())) {
                            DefaultMenuItem menuItem = new DefaultMenuItem(submenuItem.getNombre());
                            menuItem.setAjax(false);
                            menuItem.setImmediate(true);
                            menuItem.setCommand(submenuItem.getComando());
                            menuHijo.addElement(menuItem);
                        }

                        menuPrincipal.addElement(menuHijo);
                    }

                }
                model.addElement(menuPrincipal);
            }
            model.generateUniqueIds();
        } catch (Exception ex) {
            addMessage("Error en el menu", "Error");
        }

    }

    public MenuModel getModel() {
        return model;
    }

    public void addMessage(String summary, String detail) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, summary, detail);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

}
